package basic_data_structure;

public class BasicDataStructure {
    public static void main(String[] args) {
        // 1. 整数类型

        // byte：1字节（8位），范围：-128 ~ 127
        byte smallInt = 100;
        byte minByte = Byte.MIN_VALUE;  // -128
        byte maxByte = Byte.MAX_VALUE;  // 127
        System.out.println("byte类型: " + smallInt + "，最小值: " + minByte + "，最大值: " + maxByte);

        // short：2字节（16位），范围：-32768 ~ 32767
        short mediumInt = 10000;
        short minShort = Short.MIN_VALUE;  // -32768
        short maxShort = Short.MAX_VALUE;  // 32767
        System.out.println("short类型: " + mediumInt + "，最小值: " + minShort + "，最大值: " + maxShort);

        // int：4字节（32位），范围：-2^31 ~ 2^31-1（最常用的整数类型）
        int normalInt = 100000;
        int minInt = Integer.MIN_VALUE;  // -2147483648
        int maxInt = Integer.MAX_VALUE;  // 2147483647
        System.out.println("int类型: " + normalInt + "，最小值: " + minInt + "，最大值: " + maxInt);

        // long：8字节（64位），范围：-2^63 ~ 2^63-1（值后需加L标识）
        long bigInt = 10000000000L;  // 注意末尾的L（不区分大小写，但推荐大写）
        long minLong = Long.MIN_VALUE;  // -9223372036854775808
        long maxLong = Long.MAX_VALUE;  // 9223372036854775807
        System.out.println("long类型: " + bigInt + "，最小值: " + minLong + "，最大值: " + maxLong);


        // 2. 浮点类型（小数）

        // float：4字节（32位），单精度浮点数（值后需加F标识）
        float smallFloat = 3.14F;  // 注意末尾的F
        float minFloat = Float.MIN_VALUE;  // 最小正值
        float maxFloat = Float.MAX_VALUE;  // 最大正值
        System.out.println("\nfloat类型: " + smallFloat + "，最小值: " + minFloat + "，最大值: " + maxFloat);

        // double：8字节（64位），双精度浮点数（默认小数类型）
        double normalDouble = 3.1415926535;  // 无需加标识，默认是double
        double minDouble = Double.MIN_VALUE;  // 最小正值
        double maxDouble = Double.MAX_VALUE;  // 最大正值
        System.out.println("double类型: " + normalDouble + "，最小值: " + minDouble + "，最大值: " + maxDouble);


        // 3. 字符类型

        // char：2字节（16位），表示单个Unicode字符（用单引号包裹）
        char singleChar = 'A';  // 字母
        char chineseChar = '中';  // 汉字（Unicode支持）
        char unicodeChar = '\u0041';  // Unicode编码（对应'A'）
        System.out.println("\nchar类型 - 字母: " + singleChar + "，汉字: " + chineseChar + "，Unicode字符: " + unicodeChar);


        // 4. 布尔类型

        // boolean：1字节，只有两个值：true（真）/ false（假）
        boolean isTrue = true;
        boolean isFalse = false;
        boolean isGreater = 5 > 3;  // 表达式结果
        System.out.println("\nboolean类型 - 真: " + isTrue + "，假: " + isFalse + "，表达式结果: " + isGreater);


        // 常见问题演示
        System.out.println("\n===== 注意事项 =====");
        // 1. 整数溢出问题
        int overflow = Integer.MAX_VALUE + 1;
        System.out.println("int溢出（最大值+1）: " + overflow);  // 结果为最小值，发生溢出

        // 2. 浮点精度问题
        double precisionIssue = 0.1 + 0.2;
        System.out.println("0.1 + 0.2 = " + precisionIssue);  // 结果不是0.3，而是0.30000000000000004

        // 3. 类型转换
        int intNum = 128;
        byte byteNum = (byte) intNum;  // 强制转换，超出范围会截断
        System.out.println("int(128)强制转为byte: " + byteNum);  // 结果为-128（溢出）
    }
}
